#ifndef HT1621B_H
#define HT1621B_H

#include <stdint.h>
#include <stdbool.h>
#include "FreeRTOS.h"
#include "task.h"
#include "segment_codes.h"
#include "buzzer.h"  // 添加蜂鸣器头文件

// HT1621B LCD显示缓冲区大小
#define HT1621B_BUFFER_SIZE 32
// 声明lcd_buffer为extern，定义在ht1621b.c中
extern uint8_t lcd_buffer[HT1621B_BUFFER_SIZE];

// HT1621B命令
// 系统时钟命令
#define HT1621B_CMD_SYSTEM_CLOCK_RC 0x30    // 内部RC时钟
#define HT1621B_CMD_SYSTEM_CLOCK_32KHZ 0x28 // 外部32KHz时钟

// 系统控制命令
#define HT1621B_CMD_SYSTEM_DISABLE 0x00 // 关闭系统振荡器和LCD偏压发生器
#define HT1621B_CMD_SYSTEM_ENABLE 0x02  // 打开系统振荡器
#define HT1621B_CMD_LCD_OFF 0x04        // 关闭LCD偏压
#define HT1621B_CMD_LCD_ON 0x06         // 打开LCD偏压

// 偏压和COM设置
#define HT1621B_CMD_BIAS_1_2 0x40 // 1/2偏压
#define HT1621B_CMD_BIAS_1_3 0x42 // 1/3偏压
#define HT1621B_CMD_COM_3 0x08    // 3个COM
#define HT1621B_CMD_COM_4 0x10    // 4个COM

// 看门狗和定时器控制
#define HT1621B_CMD_WDT_DISABLE 0x0A   // 禁止看门狗
#define HT1621B_CMD_TIMER_DISABLE 0x08 // 禁止定时器

// 函数声明
bool ht1621b_init(void);

bool ht1621b_write_data(uint8_t addr, uint8_t data);
bool ht1621b_write_buffer(uint8_t *buffer, uint8_t len);
bool ht1621b_write_single_digit(uint8_t addr, uint8_t digit);
bool ht1621b_send_command(uint8_t cmd);

void ht1621b_display_all_segments(void);
void *ht1621b_get_lcd_buffer(void);
void ht1621b_clear_buffer(void);
void ht1621b_display_update(void);

#endif // HT1621B_H
